package contacts;

import gui.Test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * 
 * Klasse ein Set mit Personen zurückgeben kann.
 * 
 * @author Michael Weng
 * 
 */
public class PersonSet {

	private static ResultSet rs = null;
	private Connection connection;

	/**
	 * Verbindet zur Datenbank
	 */
	public boolean connect() {

		try {
			Class.forName("com.mysql.jdbc.Driver");
			connection = DriverManager
					.getConnection("jdbc:mysql://win9142.informatik.uni-wuerzburg.de:3306?user=awesomefireballs&password=jesus");

		} catch (ClassNotFoundException e) {

			e.printStackTrace();
		} catch (SQLException e) {

			e.printStackTrace();
			return false;
		}

		return true;
	}

	/**
	 * Konstruktor. Verbindet zur Datenbank und schreibt alle Tasks in das
	 * Resultset.
	 */

	public PersonSet() {

		try {
			connect();
			Statement stat;
			stat = connection.createStatement();

			stat.executeQuery("use `sopra-ws12-awesome_fireballs`;");

			rs = stat
					.executeQuery("SELECT Adress.*  FROM `sopra-ws12-awesome_fireballs`.Adress, `sopra-ws12-awesome_fireballs`.Entrys, Books, User WHERE Adress.idAdress = Entrys.idAdress AND Entrys.idBooks = Books.idBooks AND Books.idUser = User.idUser AND User.idUser = "
							+ Test.iduser + ";");

		} catch (SQLException e) {
			e.printStackTrace();
		}

	}

	/**
	 * Getter für das Resultset.
	 * 
	 * @return rs ResultSet, in dem alle Tasks stehen.
	 */

	public ResultSet getResultSet() {
		return rs;
	}

	/**
	 * 
	 * Ruft Konstruktor auf (der sich mit der Datenbank verbindet und alle Tasks
	 * in das result Set schreibt) und gibt alle Tasks in einer ArrayList
	 * zurueck, dessen Enddatum mit dem übergebenen Date übereinstimmt.
	 * 
	 * @param d
	 *            übergebenes Datum. DIESES SOLLTE DAS FORMAT y-1900, m-1, d
	 *            HABEN!
	 * @return ArrayList mit "MyTask"s
	 * @throws NumberFormatException
	 * @throws SQLException
	 */

	@SuppressWarnings("deprecation")
	public List<String[]> getTasks(ResultSet rset, Date d)
			throws NumberFormatException, SQLException {
		List<String[]> list = new ArrayList<String[]>();

		try {
			rset.absolute(1);
			do {

				String stringDate;

				stringDate = rset.getString("bday");

				SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

				if (stringDate != null) {
					if (stringDate.length() >= 5) {
						Date bday = sdf.parse(stringDate);

						// Wenn Datum Stimmt
						if ((d.getMonth() == bday.getMonth())
								&& (d.getDate() == bday.getDate())) {
							int alter = d.getYear() - bday.getYear();
							String[] geburtstag = new String[3];
							if (rset.getString("fname").length() != 0) {
								geburtstag[0] = rset.getString("fname");
							}
							if (rset.getString("lname").length() != 0) {

								geburtstag[1] = rset.getString("lname");
							}
							geburtstag[2] = Integer.toString(alter);
							System.out.println("fritz" + geburtstag);
							list.add(geburtstag);
						}

					}
				}

			} while (rset.next());
		}

		catch (ParseException e) {
			e.printStackTrace();

		}
		return list;

	}

}
